package org.ReportDesigner.reportModel;

import org.ReportDesigner.configurator.Configuration;
import org.ReportDesigner.controlModel.Type;
import com.itextpdf.text.*;
import com.itextpdf.text.pdf.PdfPCell;
import com.itextpdf.text.pdf.PdfPTable;
import org.apache.log4j.Logger;

import java.util.LinkedList;
import java.util.List;

@Type(type = "mixed", subType = "tableHeader", name = "theader")
public class TableHeader extends ReportElement {
    private static final Logger log = Logger.getLogger(TableHeader.class);
    private String textTableHeader;

    @Override
    public String getText() {
        return textTableHeader;
    }

    @Override
    public void setText(String text) {
        this.textTableHeader = text;
    }



    @Override
    public List<Element> addTo(Configuration configuration) {
        List<Element> elementList = new LinkedList<Element>();
        //проверяем присутствует ли текст в заголовке таблицы
        if (!this.getText().isEmpty()){
            Phrase phrase = new Phrase(this.getText(),
                    FontFactory.getFont(configuration.getFont(), configuration.getFontEncoding()));
            elementList.add(phrase);
        }
        //проверяем присутствует не текстовые элементы в таблице
        if (!this.getBody().isEmpty()){
            //создаем таблицу для заголовка
            PdfPTable table = new PdfPTable(getColumnNumber());
            //получаем тело заголовка
            for (ReportElement repElement: this.getBody()){
                //полчаем представление
                for (Element element: repElement.addTo(configuration)){
                    //создаем елемент
                    PdfPCell cell = new PdfPCell();
                    cell.addElement(element);
                    //добавляем элемент в таблицу
                    table.addCell(cell);
                }
            }
            elementList.add(table);
        }
        return elementList;
    }


    private int getColumnNumber(){
        List<ReportElement> list = this.getBody();
        int i = 0;
        for (ReportElement element: list)
            if (i < element.getBody().size()){
                i = element.getBody().size();
            }
        return i;
    }
}
